Process
프로세스
실행중인 프로그램. 디스크에 있는 프로그램이 메모리에 로드되면 프로세스가 된다.
프로세스의 문맥
프로세스의 현재 상태를 나타내는데 필요한 모든 요소를
프로세스 문맥
이라고 함
- cpu 와 관련된 하드웨어 문맥
- program counter
- 각종 register
- 프로세스의 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료구조
- PCB
- Kernel stack
현대 컴퓨터 에서는 타임 쉐어링 멀티테스킹 등 여러 프로세서가 실행되므로 프로세스의 현재 문맥저장하고 알아야, 프로세스를 이어하기 할 수 있다
❓kernel stack 어떤 정보들이 저장되고 kernel stack과 pcb 의 차이가 궁금하다
프로세스의 상태
프로세스는 상태가 변경되며 수행된다.
- Running
- cpu 제어권 가지고 실행중인 상태
- Ready
- cpu 기다리는 중
- 다른 모든 준비( 실행에 필요한 데이터 등) 끝나고 cpu 너만 오면 ㄱ
- Blocked (wait, sleep)
- cpu 주어져도 아무것도 못하죠? 상태
- 오래걸리는 작업하는 중( ex, I/O or storage에서 data 가져오는 중 )
- device 뿐만 아니라 데이터에도 동시 접근 등을 피하기 위한 queue 가 존재
running 상태의 프로세스 A 가 사용자로부터 키보드 입력을 받아서 결과를 확인하고 실행하는 과정
- A 가 I/O 줄에 섬.
running
→blocked
- cpu가 ready 상태에 있는 프로세스 B 에게 제어권 넘김
- B running 하다가 I/O 입력 받으면 cpu 에게 interrupt 발생시켜서 알려주고 cpu 하던일 멈추고 OS 로 가서 A 의 상태를 ready로 바꿈
- A ready 에 줄섬
PCB
운영체제가 프로세스를 관리하기 위해 프로세스당 유지하는 정보
다음의 구성요소들을 구조체로 유지
- os가 관리상 사용하는 정보
- process state, process id
- scheduling information priority
- cpu 수행 관련 하드웨어 값
- program counter, registers
- 메모리 관련
- code ,data, stack 의 위치정보
- 파일관련
문맥 교환(context switch)
그림에서 회색 박스 부분이 kernel mode 로 전환된다는 의미라고함. 저 짧은 순간에만 OS가 실행되고 이외 시간에 OS는 sleeping 함. 즉, OS 는 항상 백그라운드에서 실행되거나 하는 프로세스가 아니다. context switch는 프로세스 관리를 위해서 필요하지만 실질적인 작업을 하지 못하는 것이기 때문에 가능한 빠르게 이루어 져야 한다.
- cpu를 뺏기는 프로세스의 상태를 그 프로세스의 PCB에 저장해놓음 ( save 느낌 )
- cpu를 새롭게 얻는 프로세스의 상태를 PCB 에서 읽어옴 ( load 느낌 )
- system call이나 interrupt 발생시 반드시 context switch 가 일어나는 것은 아님
- system call 후에 프로세스 이어할때
- timer interrupt 등으로 프로세스 바꿀때
1의 경우에도 context의 일부를 pcb 에 저장해야하긴하지만 문맥교환 까지는 아님
2의 경우에는 문맥교환 일어남 (+cache memory flush도 일어남 )
프로세스를 스케줄링하기 위한 큐
- job queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
- ready queue
- device queue
스케줄러
- Long-term scheduler ( job scheduler )
- 메모리를 어떤 프로세스에게 줄지 결정
- 프로세스가 시작이 될 때 (new → ready ) 프로세스가 memory에 올라가는걸 admit 해주는 놈임
- 메모리에 올라가는 프로세스 수를 제어
- time sharing system에는 장기 스케줄러 없이 곧바로 메모리에 올려놓음
⇒ degree of multiprogramming을 medium-tem scheduler 가
- shor-term scheduler( cpu scheduler )
- 다음번에 어떤 프로세스에게 cpu를 줄지 결정
- medium-term scheduler ( swapper )
- 메모리에 프로세스 너무 많으면 프로세스들 내쫓음
- degree of multiprogramming 제어
프로세스 상태(suspended 추가)
- suspended ( stopped )
- 외부에서 프로세스를 강제로 정지시켜 놓은 상태( ex, medium-term scheduler )
- 메모리에서 쫓겨나서 디스에 swap out 됨
Blocked
: 자신이 요청한 event가 만족되면 Ready
Suspended
: 외부에서 resume해 주어야 active
- system call 등의 이유로 os가 실행중일 때 os가 running 한다고 보지 않고 system call, interrupt를 발생시킨 프로세스의 running 중인 상태로 봄
- blocked , ready 어떤 상태에서 suspended 되었는지에 따라서 나눔
- 메모리에서 out 된 상태지만 suspended blocked 상태에서 이벤트 발생 혹은 I/O 완료 등으로 suspended ready로 상태가 넘어갈 수는 있다.
Thread
CPU 수행의 기본 단위 또는 프로세스 안의 제어권의 흐름. 스레드가 수행되는 환경을 Task라고 부르는데, 전통적인 프로세스는 하나의 스레드가 있는 Task와 일치한다
동일한 일을 하는 프로세스가 여러개 있다고 했을 때 별도의 주소공간을 각각 만들면 메모리 낭비
⇒ 같은 주소 공간에서 각자 다른 code를 수행하게 해주면 됨. 그게 바로 Thread
- 프로그램 하나에 PC만 여러게 두고 있음
- 각 thread마다 pc값랑 registers 값을 pcb 에 유지
- stack영역을 thread 마다 나누어서 사용
스레드 사용이유
- 두 프로세스가 하나의 데이터를 공유하려면 메시지 패싱이나 공유 메모리 또는 파이프를 사용해야하는데 효율이 낮고, 개발자가 구현 관리하기도 번거롭다.
- 프로세스 사이에 문맥 교환이 자주 일어나면 성능저하가 발생하는데, 스레드 전환에도 문맥교환이 일어나지 빠르다
- thread의 구성
- program counter
- register set
- stack space
- thread가 동료 thread와 공유하는 부분( = task )
- code section
- data section
- OS resources
- lightweight process : thread 사용해서 관리하는 프로세스 방식
- heavyweight process : 반대
- thread 장점
- 하나의 thread가 blocked 상태인 동안 다른 thread가 running 되어 빠른 처리를 할 수 있다.
사용자에게 빠른 응답성 제공 - 메모리 낭비 줄일 수 있음.
- 병렬성을 높일 수 있음.
- 하나의 thread가 blocked 상태인 동안 다른 thread가 running 되어 빠른 처리를 할 수 있다.
thread 장점
- responsiveness
- ex) multi-threaded web : 먼저 load된 html 만 보여줌.
- resource sharing
- 메모리 낭비 줄일 수 있음
- economy?
- process 만드는 것보다 thread를 만드는게 더 쉬움
- thread 간의 문맥 교환은 매우 간단함
- uilization of MP architecture
- cpu가 여러개 일 때 thread 가 여러개면 여러 cpu에서 병렬적으로 계산 가능
implementation of threads
- kernel threads : 커널에 의해서
- OS 가 스레드가 여러개인 것을 인지하고 있고, 커널이 스레드를 지원해줌
- user threads : 라이브러리에 의해서
- 유저가 스스로 관리
퀴즈
- 메모리에서 프로세서들을 내쫓기 위해 작동하는 스케줄러
medium-term schedular - CPU를 주어도 당장 instruction을 수행할 수 없는 상태 또는 process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태
suspended